home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / littlest / littl-st.lha / queen.st < prev    next >
Text File  |  1993-08-10  |  1KB  |  65 lines

  1. Class NullQueen Object
  2. Class Queen Object row column neighbor
  3. Methods NullQueen 'all'
  4.     first
  5.         ^ true
  6. |
  7.     next
  8.         ^ true
  9. |
  10.     checkRow: row column: column
  11.         " we can't attack anything "
  12.  
  13.         ^ false
  14. |
  15.     result
  16.         ^ List new
  17. ]
  18. Methods Queen 'all'
  19.     setColumn: aNumber neighbor: aQueen
  20.         column <- aNumber.
  21.         neighbor <- aQueen
  22.  
  23. |
  24.     checkRow: testRow column: testColumn | columnDifference |
  25.         columnDifference <- testColumn - column.
  26.         (((row = testRow) or: 
  27.             [ row + columnDifference = testRow]) or:
  28.             [ row - columnDifference = testRow])
  29.                 ifTrue: [ ^ true ].
  30.         ^ neighbor checkRow: testRow column: testColumn
  31. |
  32.     first
  33.         neighbor first.
  34.         row <- 1.
  35.         ^ self testPosition
  36. |
  37.     next
  38.         ^ (self advance) and: [ self testPosition ]
  39. |
  40.     advance
  41.         (row = 8)
  42.             ifTrue: [ (neighbor next) ifFalse: [ ^ false ].
  43.                   row <- 0 ].
  44.         row <- row + 1.
  45.         ^ true
  46. |
  47.     testPosition
  48.         [neighbor checkRow: row column: column]
  49.             whileTrue: [ (self advance) ifFalse: [ ^ false ]].
  50.         ^ true
  51. |
  52.     result
  53.         ^ neighbor result addLast: row
  54. ]
  55. Methods Test 'queen'
  56.     queen        | lastQueen |
  57.         lastQueen <- NullQueen new.
  58.         (1 to: 8) do: [:i | lastQueen <- Queen new;
  59.                     setColumn: i neighbor: lastQueen ].
  60.         lastQueen first.
  61.         (lastQueen result asArray = #(1 5 8 6 3 7 2 4) )
  62.             ifTrue: ['8 queens test passed' print]
  63.             ifFalse: [smalltalk error: '8queen test failed']
  64. ]
  65.